//
// Created by Jisam on 29/09/2024 11:40 PM.
// Solution of  小红的树上移动 (2)
#include <bits/stdc++.h>
using namespace std;
#define int long long // 定义int为long long类型，用于处理大整数
#define mod 1000000007 // 定义模数，用于取模运算

int n, u, v, ans, inv[100471], f[100471]; // 定义全局变量
vector<int> G[100471]; // 定义邻接表G，用于存储图

// 深度优先搜索函数
void dfs(int u) {
    ans = (ans + f[u]) % mod; // 将当前节点的分数累加到答案ans中，并取模
    for (auto v : G[u]) { // 遍历当前节点u的所有邻接节点v
        G[v].erase(find(G[v].begin(), G[v].end(), u)); // 从v的邻接表中删除u，避免形成环
        f[v] = f[u] * inv[G[u].size()] % mod; // 计算v的分数，为u的分数乘以u的邻接节点数的逆元
        dfs(v); // 递归调用dfs遍历v的邻接节点
    }
}

// 主函数
signed main() {
    scanf("%lld", &n); // 读取节点数n
    for (int i = 1; i < n; i++) { // 读取每条边的信息
        scanf("%lld%lld", &u, &v); // 读取边的两个节点u和v
        G[u].push_back(v); // 将v添加到u的邻接表中
        G[v].push_back(u); // 将u添加到v的邻接表中
    }
    inv[1] = 1; // 初始化逆元数组，1的逆元是1
    for (int i = 2; i <= n; i++) { // 计算2到n的逆元
        inv[i] = (mod - mod / i) * inv[mod % i] % mod; // 根据逆元的定义计算逆元
    }
    f[1] = 1; // 初始化节点1的分数为1
    dfs(1); // 从节点1开始进行深度优先搜索
    printf("%lld\n", ans); // 输出最终答案

    return 0;
}